20. Project Development¶
Final Project Proposal¶
The 2D chair - initial idea¶
In modern times, the houses of people in cities have become smaller but the needs have increased.
Most of the furniture pieces in a house are not used most of the time. So why waste space?
What I propose here is a chair which transforms into a planar surface hence occupying minimum space when not in use.
Initial Idea¶
The Process of Transformation¶
Folding stage 1 : The chair when in use¶
Folding stage 2 : One member sticks to the wall¶
Folding stage 3 : The chair starts to fold into a 2d plane¶
Folding stage 4 : The chair becomes 2d occupying zero floor space¶
Components¶
The final chair assembly with have primary four types of fabricated parts.
- Wall Mount - The box that holds the chair will be mounted to the wall and will also contain all the electronic components including the motors, PCB, and the input devices.
- Frame Member 1 - One of the two types of members supporting the chair. 4 of each will be used in one chair.
- Frame Member 2 - The other member supporting the chair. There will be 4 of these members too.
- Seating - The seating and the backrest which unfolds with the frame.
Input/Output Devices¶
Input
- Though I planned to use Motion detectors to open the chair, I feel using a touch sensor would be more ideal since with motion detectors, the chair might start unfolding without someone actually wanting it to.
- The second will be ultrasonic sensor that will detect if someone is standing in front of the chair. If there is, the unfolding process would stop to prevent someone getting hurt.
- The third will be a pressure sensor which will initiate the folding of the chair to 2d plane after it is unused for 60 seconds.
Output
- In both cases, the output will be thw two synchronised motors.
Detail drawings and dimensions¶
Joinery Detail Examples¶
Requirements¶
- The primary material will be plywood and I’ll use the CNC machine in making the chair. The initial scaled prototypes will be made using MDF using laser cutting technique.
- Certain small parts might need to be 3d printed, especially in the smaller prototypes.
- The motor which would help with collapsing the chair.
- The trigger for the transformation(Input Device).
Challenges¶
- Since the chair transforms into a flat surface, the placement and working of the machine parts will be challenging.
- When folding, the chair moves from ground to a higher level on the wall. So the motor should be able to lift weight and the chair should be as light as possible.
- Being from a design background, incorporating electronics in furniture is something which will be challenging.
Deliverables¶
- The final working prototype of the chair, manufactured using the FabLab tools and machines.
- I might add a function where the size of the seat and the backrest can change and hence the chair can be used by different user as per their needs and for different postures.
- Furthermore, in future(not in the FabAcademy duration), using multipe such furniture pieces, a small space can be used for multiple functions.
References¶
Transformation¶
Output Devices¶
During Output devices, I wrote this code to use the touch sensor and ultrasonic sensor to run the motor exactly as I wished to for my final project.
#define ctsPin A1 //defines input pin const int trigPin = A2; const int echoPin = A3; //Constant Integer value long duration; int distance; int ledPin = 13; int m1 = 6; int m2 = 7; defines the specified pin numbers as integers void setup() { Serial.begin(9600); // Starts the serial communication pinMode(ledPin, OUTPUT); // defines output pinMode(m1, OUTPUT); // defines output pinMode(m2, OUTPUT); // defines output pinMode(ctsPin, INPUT); // defines input pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output pinMode(echoPin, INPUT); // Sets the echoPin as an Input } void loop() // starts the loop { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); // Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, LOW); // Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH); // Calculating the distance distance= duration*0.034/2; // Calculating the distance Serial.print("Distance: "); Serial.println(distance); // Prints the distance on the Serial Monitor int ctsValue = analogRead(ctsPin); if (ctsValue >= 400 && distance >6) // condition 1 { digitalWrite(ledPin, HIGH); digitalWrite(m1,HIGH); digitalWrite(m2,LOW); // output Serial.println("TOUCHED"); // Output in serial monitor } if ( distance <5) //condition 2 { digitalWrite(ledPin,LOW); digitalWrite(m2,LOW); digitalWrite(m1,LOW); // output Serial.println("not touched"); // Output in serial monitor } else // condition 3 { digitalWrite(ledPin,LOW); digitalWrite(m2,LOW); digitalWrite(m1,LOW); // output } }
- This is the code in action.
Here, the ultrasonic will be fixed in front of the chair so the chair does not unfold on a person standing in front of it. The touch switch won’t take an input in th event of someone standing in front.
Project Plan - Timeline¶
-
Going ahead with this idea, I knew I had a large scale prototype to build than usual which would take more than a week. Hence, I had to make the most of the break week.
-
Also, the last week before final project, Invention, intellectual property and income, took lesser time than most other weeks hence I could use that time too.
-
Hence, this was the timeline I decided to finish my project on time:
-
Break Week(week 14) : Make a 1:2 prototype for testing out the mechanism. Source the gears, motors, and every other major component required for the final project, since delivery could take some time.
- Week 15-18 : Use the time to finish the CAD development for the project, so I can start with the manufacturing part at the beginning of the final 2 weeks.
- Week 19 : Start with the manufacturing of parts(CNC Machining), the mount and the chair, so I can start with the assembly and programming during the Final project development week.
- Final Project Development(Week 20) : Start with the testing of mechanism using the final parts manufactured suring the last week. If everything works perectly, go ahead with the mounting and assembling and finish it in 4-5 days. Next one week is for programming the chair and fail-safe period (There are high chances something might fail in such a big prototype).
1:2 model¶
During the break week, I decided to make a 1:2 model to get more idea about the working of the folding mechanism.
-
For that I got a sheet of 6mm mdf, since I was planning to use 12mm for the final prototype. Made a lasercut file using Autocad.
-
The nested sheet looked something like this:
- I then took this file to laser machine, got the pieces and assembled it. This was the end product.
- This was an important step towards my final project. It gave me an assurance for this part. Now, the mechanism that controlled the movement was next.
Final Components¶
Motors and Motor Driver¶
The previos model gave me an estimate of the weight of my final prototype. So accordingly, I bought the motors.
- The one I bought were 10 rpm square geared DC motor. This is the link from where I bought.
Specifications :
- Base Motor RPM: 6000
- Rated Voltage: 12 V
- Rated Torque: 22 kg-cm
- Stall Torque: 90 kg-cm
- Gearbox Dimensions: 72 x 47 x 20 mm(LxWxH)
- Shaft Length: 25.6 mm
- Shaft : 8mm
- No Load Current : 500MA (MAX), LOAD CURRENT= 700MA (MAX).
- The L293d cannot run these motors. Hence, I got a BTS7960 motor driver to run two motors.
Updated board¶
-
The board I was using did not have pins for this motor driver. Thus, I removed the L293d bed and replaced it with a 4X2 pin header for connecting the driver.
-
Below are the traces, through holes and cut files for this v3 of my final board.
Testing the motor driver with the mototrs.¶
-
After getting this board ready and soldering all the components, it was time for a test run! I used an arduino board to programme this board to run the motors using the BTS7960 motor driver.
-
I soldered the wires to the motors and fixed the other ends to th motor driver. Here, since I wanted both the servos to run at the same speed, I connected both the motors to the same motor driver on the same pins.
- I wrote the below code to move the motor in front and reverse dirctions.
#define rPWM 5 #define fPWM 6 #define rEN 7 #define fEN 8 void setup() { pinMode(rPWM, OUTPUT); pinMode(fPWM, OUTPUT); pinMode(rEN, OUTPUT); pinMode(fEN, OUTPUT); } void loop() { forward(255); delay(1000); pause(); delay(500); reverse(255); delay(1000); pause(); delay(500); } void forward(int speed) { digitalWrite(rEN, HIGH); digitalWrite(fEN, HIGH); analogWrite(rPWM, speed); digitalWrite(fPWM, LOW); } void reverse(int speed) { digitalWrite(rEN, HIGH); digitalWrite(fEN, HIGH); analogWrite(fPWM, speed); digitalWrite(rPWM, LOW); } void pause() { digitalWrite(rEN, LOW); digitalWrite(fEN, LOW); analogWrite(fPWM, LOW); digitalWrite(rPWM, LOW); }
- This is the video of it in action.
The Mechanism¶
- As seen in the below diagram, one of the members need to rotate by 45 degrees to be vertical whereas the other 135 degrees. Since both the motors will be moving at the same speed, the gears need to adjust the rotation of these members.
-
For that, I to use a 1:1 gear ratio on one side and 1:3 gear ratio on the other.
-
After a lot of going around in the market, I was finally able to source a place to make me gears of this ratio.I bought gears of one size(3 nos) and got custom made one gear of 3 times the size.
-
Next was making the mounting assembly which was also the the housing for all the mechanism and electronic parts.
-
I made the 3d for this with a CNC press-fit joinery in mind.
- This is how the motor, the gears, would be mounted to the chair frame.
- From the 3d, I generated the 2d file for CNC cutting.
For information on how to use the dxf file for CNC Cutting, visit week 8
- The dog-bones for press-fit joinery.
- This is how the assembled box looked like.
Problems faced and fixes¶
- Problem : I mounted the motor. But, because of the thickness of the material, the shaft arm wasnt extruding out of the material enough to hold the weight.
- Solution : I made new parts which mounted the motor with pockets for motor to go in. With this new piece, the motor held the gears perfectly fine and it was ready for test.
- Problem : Even though the first test run was successful, the shaft and the gear were slipping sometimes and the friction wasnt enough.
- Solution : I made a hole in the shaft arm for holding the gear, so that the screw goes in and doesn’t allow the gear to slip.
- Once, I had all the parts together now, I tested the whole thing as a system(with less weight at the time)
- This is the video of the second test.
- Problem : As you can see, the motor seemed to be failing to hold the load and as a result, the gear broke.
- This happened multiple times. On further diagnosis, I discovered since the length of the arm was more, the torque would reduce, hence the motors werent capable to take the load at this arm length.
Unsuccessful Solution 1 : I tried to reduce the weight of the members by removing extra material from the centre.
-
But the end result was the same. A broken part.
-
With only 3 days to go for the final presentation, I had to act fast.
-
For this mechanism to work, what I would require is better motors with more torque and metal gears.(I couldn’t use metal gears with these motors as any failure would damage my motor shaft and not the gears had I used metal gears).
Successful Solution 2 : I decided to use the same parts and change the design and the mechanism to manufacture my furniture prototype. This is how that transformation went.
-
The new parts that I required were:
- 2 * Pulleys
- Shaft Mount(To wind the cable)
- 2mm cable wires
- Eye Hooks
-
The first two parts here, I manufactured using the 3d printer. The other two I had to source from a local hardware store.
-
The 3d printed parts:
Mounting the pulley¶
- For the pulley, I had to place it at a 45 degree angle for it to transfer the cable load in the way I required. Thus I made the puller mount and tested it to see if it was smooth enough.
-
Next was mounting this pulley box to the main box at the exact angle. I used the drill holes I had made earlier using the laser cutter to screw it to the main box.
-
Once I had everything, it was time to start the assembly of the whole system for a test of the mechanism. This is how the test went.
- Since the motor I had was 10 RPM, the process of opening and closing was too slow. But it still worked!
Final Assembly¶
- After the test was successful, I took apart the chair, painted it and put it back together one last time.
Programming the board¶
- In this case, I decide to use the same sensors in a slightly different way. The touch switch would open the chair and the ultrasonic would detect when the person stands up and the chair closes itself. The code that I wrote for this is shown below:
#include <Ultrasonic.h> #define rPWM 5 #define fPWM 6 #define rEN 7 #define fEN 8 #define touchSW A1 #define limit1 A2 #define limit2 A3 Ultrasonic ultrasonic(11,12); int distance; int sw1; int sw2; int touch; void forward(int speed) { digitalWrite(rEN, HIGH); digitalWrite(fEN, HIGH); digitalWrite(rPWM, HIGH); digitalWrite(fPWM, LOW); digitalWrite(13,HIGH); } void reverse(int speed) { digitalWrite(rEN, HIGH); digitalWrite(fEN, HIGH); digitalWrite(fPWM, HIGH); digitalWrite(rPWM, LOW); digitalWrite(13,LOW); } void pause() { digitalWrite(rEN, LOW); digitalWrite(fEN, LOW); analogWrite(fPWM, LOW); digitalWrite(rPWM, LOW); } void setup() { pinMode(rPWM, OUTPUT); pinMode(fPWM, OUTPUT); pinMode(rEN, OUTPUT); pinMode(fEN, OUTPUT); pinMode(13,OUTPUT); pinMode(touchSW,INPUT); pinMode(limit1,INPUT_PULLUP); pinMode(limit2,INPUT_PULLUP); pinMode(13,OUTPUT); Serial.begin(9600); } void loop() { distance = ultrasonic.read(); sw1 = analogRead(limit1); sw2 = analogRead(limit2); touch = analogRead(touchSW); Serial.println("distance"); Serial.print(distance); Serial.println("sw1"); Serial.print(sw1); Serial.println("sw2"); Serial.print(sw2); Serial.println("touch"); Serial.print(touch); if( touch >= 500 ) { forward(255); delay(100); } else if (distance > 20) { reverse(255); // pause(); } if (sw2 <= 400) { pause(); } }
- Once, my board was programmed, I mounted it in my chair prototype as shown.
- This is the final video, where you can see it in action.
-
Since the motor I had was for 10 rpm(According to my old design requirement), the chair opened and closed really slow. It took about 50 secs for it to open.
-
Also, I didnot get a proper place to mount the box(University rules doesnt allow us to put screws in any of the walls), I found a place to temporarily mount it. But this mounting couldn’t take the human load and hence I couldn’t test it with a person sitting on it. But, since the load was divided into two opposite sides at the motor, it should hold the human weight when mounted properly.
Files¶
2D chair by Dhruv Thakker